package com.efast.dmom.mgmt.dao.mes;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.efast.dmom.mgmt.bean.mes.WorkOrderInfoDto;
import com.efast.dmom.mgmt.bean.mes.order.RecycledVinBean;
import com.efast.dmom.mgmt.bean.mes.order.WorkOrderItem;
import com.efast.dmom.mgmt.bean.mes.plan.PlanCapacityBean;
import com.efast.dmom.mgmt.entity.mes.TwBasWorkOrder;
import com.efast.dmom.mgmt.utils.Assist;
public interface TwBasWorkOrderDao{
	 /**
	 * 获取父级id相同的工单 
     * @param id
     * @return
     */
 	List<TwBasWorkOrder> getListByParendId(@Param(value = "id") int id);
	
	 /**
     * 通过已知的工单号获取工单信息
     * @param no
     * @return
     */
	TwBasWorkOrder getOrderByNo(String no);
	
	/**
	 * 获得TwBasWorkOrder数据的总行数,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * @param assist
	 * @return
	 */
    long getTwBasWorkOrderRowCount(Assist assist);
	/**
	 * 获得TwBasWorkOrder数据集合,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * @param assist
	 * @return
	 */
    List<TwBasWorkOrder> selectTwBasWorkOrder(Assist assist);
	/**
	 * 获得一个TwBasWorkOrder对象,以参数TwBasWorkOrder对象中不为空的属性作为条件进行查询
	 * @param obj
	 * @return
	 */
    TwBasWorkOrder selectTwBasWorkOrderByObj(TwBasWorkOrder obj);
	/**
	 * 通过TwBasWorkOrder的id获得TwBasWorkOrder对象
	 * @param id
	 * @return
	 */
    TwBasWorkOrder selectTwBasWorkOrderById(Integer id);
	/**
	 * 插入TwBasWorkOrder到数据库,包括null值
	 * @param value
	 * @return
	 */
    int insertTwBasWorkOrder(TwBasWorkOrder value);
	/**
	 * 插入TwBasWorkOrder中属性值不为null的数据到数据库
	 * @param value
	 * @return
	 */
    int insertNonEmptyTwBasWorkOrder(TwBasWorkOrder value);
	/**
	 * 批量插入TwBasWorkOrder到数据库,包括null值
	 * @param value
	 * @return
	 */
    int insertTwBasWorkOrderByBatch(List<TwBasWorkOrder> value);
	/**
	 * 通过TwBasWorkOrder的id删除TwBasWorkOrder
	 * @param id
	 * @return
	 */
    int deleteTwBasWorkOrderById(Integer id);
	/**
	 * 通过辅助工具Assist的条件删除TwBasWorkOrder
	 * @param assist
	 * @return
	 */
    int deleteTwBasWorkOrder(Assist assist);
	/**
	 * 通过TwBasWorkOrder的id更新TwBasWorkOrder中的数据,包括null值
	 * @param enti
	 * @return
	 */
    int updateTwBasWorkOrderById(TwBasWorkOrder enti);
 	/**
	 * 通过辅助工具Assist的条件更新TwBasWorkOrder中的数据,包括null值
	 * @param value
	 * @param assist
	 * @return
	 */
    int updateTwBasWorkOrder(@Param("enti") TwBasWorkOrder value, @Param("assist") Assist assist);
	/**
	 * 通过TwBasWorkOrder的id更新TwBasWorkOrder中属性不为null的数据
	 * @param enti
	 * @return
	 */
    int updateNonEmptyTwBasWorkOrderById(TwBasWorkOrder enti);
 	/**
	 * 通过辅助工具Assist的条件更新TwBasWorkOrder中属性不为null的数据
	 * @param value
	 * @param assist
	 * @return
	 */
    int updateNonEmptyTwBasWorkOrder(@Param("enti") TwBasWorkOrder value, @Param("assist") Assist assist);
	/**
	 * 产品包装通过扫入工单号获取工单信息
	 * @param orderNumber
	 * @return
	 */
	WorkOrderInfoDto getWorkOrderInfo(@Param("orderNumber") String orderNumber);
	/**
	 * 按周获取工单总量（从当前周往前5周）
	 * @return
	 */
	List<WorkOrderInfoDto> getOrderCount();

	/**
	 * 自动生成工单详情
	 * @param itemList
	 */
	void insertWorkItem(@Param("itemList") List<WorkOrderItem> itemList);

	/**
	 * 
	 * @param orderId
	 * @return 通过orderId获取计划详情
	 */
	List<WorkOrderItem> getWorkOrderItem(@Param("orderId") int orderId);

	/**
	 * 
	 * @param orderId
	 * @return 工单状态冻结
	 */
	Boolean updateWorkOrderStatusById(Integer orderId);

	/**
	 * 工单item详情冻结
	 * @param orderId
	 */
	void updateWorkOrderItemStatusById(Integer orderId);

	/**
	 * 
	 * @param orderId
	 * @return 工单状态解冻
	 */
	Boolean updateWorkOrderThawStatusById(Integer orderId);
    
	/**
	 * 工单Item详情进行解冻
	 * @param orderId
	 */
	void updateWorkOrderItemThawStatusById(Integer orderId);

	/**
	 * 发布时对工单状态进行处理
	 * @param orderId
	 */
	void updateWorkOrderItemReleasedStatusById(Integer orderId);

	/**
	 * 工单item报废
	 * @param sequenceList
	 */
	void scrapWorkOrderItem(List<RecycledVinBean> sequenceList);

	/**
	 * 工单创建状态下的订单取消
	 * @param noGenerateList
	 */
	void updateWorkOrderStatus(List<TwBasWorkOrder> noGenerateList);

	/**
	 * 修改工单item的状态
	 * @param noGenerateList
	 */
	void updateWorkOrderItemStatus(List<TwBasWorkOrder> noGenerateList);

	void updateStausById(List<WorkOrderItem> orderCompletedlist);

	void updateLotBySequence(List<WorkOrderItem> workOrderItemList);

	/**
	 * 通过工单id查找生成的工单item数量
	 * @param orderKey
	 * @return
	 */
	
	Integer selectWorkOrderQtyByOrderId(Integer orderId);

	/**
	 * 修改完全数量下的工单状态
	 * @param completedTwWorkOrder
	 */
	void updateCompletedQtyWorkOrderStatus(TwBasWorkOrder completedTwWorkOrder);
    /**
     * 修改TwWorkOrderItem状态
     * @param workOrderItem
     */
	void updateTwBasWorkOrderItemStatus(List<WorkOrderItem> workOrderItem);

	void updateReplacedWorkOrderStatus(TwBasWorkOrder replacedTwWorkOrder);

	void updateReplacedSatus(List<WorkOrderItem> orderReplacedlist);
	
	List<PlanCapacityBean> getCapacityInfo(int planId);

	/**
	 * 关闭工单
	 * @param workOrder
	 */
	void updateOrderClosedStatus(List<TwBasWorkOrder> workOrder);
	
	/**
	 * 工单关闭释放排产结果表产能
	 * **/

	void deleteScheduleInfoData(List<TwBasWorkOrder> workOrder);
	/**
	 * 关闭工单item状态
	 * @param workOrder
	 */
	void updateOrderItemClosedStatus(List<TwBasWorkOrder> workOrder);
	
	/**
	 * 通过工单的id来更新工单的状态
	 * @param WorkOrderItem
	 */
	void updateOrderItemStatus(WorkOrderItem workOrderItem);

	/**
	 * 通过工单的id查询替换订单完成的数量
	 * @param orderKey
	 * @return
	 */
	Integer selectWorkOrderItemFinishedQtyByOrderId(int orderId);

	/**
	 * 通过工单的id查询替换订单取消的数量
	 * @param orderKey
	 * @return
	 */
	Integer selectWorkOrderItemCanceledQtyByAOrderId(int orderId);
	
	/**
	 * 通过工单的id查询订单下的item
	 * @param orderKey
	 * @return
	 */
	Integer  selectWorkOrderItemByOrderNumber(@Param("orderId")int orderId);

}